package com.cs.service.impl;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cs.constant.ProdTagConstant;
import com.cs.domain.ProdTag;
import com.cs.mapper.ProdTagMapper;
import com.cs.service.ProdTagService;
import com.cs.vo.ProdTagVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import springfox.documentation.spring.web.json.Json;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Service
@Slf4j
@CacheConfig(cacheNames = "com.cs.service.impl.ProdTagServiceImpl")
public class ProdTagServiceImpl extends ServiceImpl<ProdTagMapper, ProdTag> implements ProdTagService{

    @Autowired
    private ProdTagMapper prodTagMapper;

    /**
     * 分页查询商品的分组
     *
     * @param page
     * @param prodTag
     * @return
     */
    @Override
    @Cacheable(key = ProdTagConstant.PRODTAG_PAGE_PREFIX)
    public Page<ProdTag> findProdTagPage(Page<ProdTag> page, ProdTag prodTag) {
        page.addOrder(OrderItem.desc("create_time"));
        Page<ProdTag> prodTagPage = prodTagMapper.selectPage(page, new LambdaQueryWrapper<ProdTag>().eq(!ObjectUtils.isEmpty(prodTag.getStatus()), ProdTag::getStatus, prodTag.getStatus()).like(StringUtils.hasText(prodTag.getTitle()), ProdTag::getTitle, prodTag.getTitle()));
        return prodTagPage;
    }



    /**
     * 添加商品的分组接口
     * @param prodTag
     * @return
     */
    @Override

    @Caching(evict = {
            @CacheEvict(key = ProdTagConstant.PRODTAG_PAGE_PREFIX),
            @CacheEvict(key = ProdTagConstant.PRODTAG_LIST_PREFIX)
    })
    public boolean save(ProdTag prodTag) {
        log.info("添加商品的分组{}", JSON.toJSONString(prodTag));
        prodTag.setShopId(1L);
        prodTag.setCreateTime(new Date());
        prodTag.setUpdateTime(new Date());
        //设置商品数量
        prodTag.setProdCount(0L);
        int insert = prodTagMapper.insert(prodTag);
        return insert>0;
    }

    /**
     * 查询所有的商品分组
     * @return
     */
    @Override
    @CacheEvict(key = ProdTagConstant.PRODTAG_LIST_PREFIX)
    public List<ProdTag> list() {
        List<ProdTag> prodTags = prodTagMapper.selectList(new LambdaQueryWrapper<ProdTag>().eq(ProdTag::getStatus, 1L).orderByDesc(ProdTag::getSeq));
        return prodTags;
    }

    /**
     * 查询前台的标签
     *
     * @return
     */
    @Override
    public List<ProdTagVo> loadProdTagList() {
        List<ProdTag> prodTags = prodTagMapper.selectList(new LambdaQueryWrapper<ProdTag>()
                .eq(ProdTag::getStatus, 1).orderByDesc(ProdTag::getSeq)
                .eq(ProdTag::getShopId, 1L));

        ArrayList<ProdTagVo> prodTagVos = new ArrayList<>(prodTags.size());
        prodTags.forEach(prodTag -> {
            ProdTagVo prodTagVo = new ProdTagVo();
            BeanUtils.copyProperties(prodTag,prodTagVo);
            prodTagVos.add(prodTagVo);
        });
        return prodTagVos;
    }


}
